<?php

namespace app\command;

use mall\library\Huobi;

/**
 * 重启检测
 * Class RestartDetection
 * @package app\command
 */
class RestartDetection
{
    /**
     * 监控
     */
    const HISTORY_TRADE_CONFIG = [
        'SYMBOL_GET_INTERVAL_TIME'  => 10,   // 获取行情间隔时间（秒）
        'SYMBOL_NULL_INTERVAL_TIME'  => 120,   // 空状态下允许的无数据时间间隔（秒）
    ];

    /**
     * 监控行情数据
     */
    static function HistoryTrade($portIndex = null) {
     //  return true;
        for($i = 0;$i<3;++$i) {
            try {
                $result = false;
                // 获取关注的币种
                $huobi = null;
                $symbolList = HistoryTrade::tcpTableQuery('selectSymbol',$portIndex)['result'];
                // 获取币种最后插入时间
                foreach($symbolList as $symbol) {
                    $historyTable = HistoryTrade::tcpTableQuery(HistoryTrade::TABLE_SELECT_RUN . ' ' . $symbol,$portIndex);
                    $lastTime = $historyTable['result']?$historyTable['result']['lastTime']:0; // 获取最后获取到的时间
                    if(time() - $lastTime < self::HISTORY_TRADE_CONFIG['SYMBOL_GET_INTERVAL_TIME']) {
                        // 币种验证通过
                        continue;
                    }
                    // 获取第三方行情时间
                    if(is_null($huobi)) {
                        $huobi = new Huobi('','','');
                    }
                    $historyTime = ceil($huobi->get_history_trade($symbol)['data'][0]['ts'] / 1000);

                    // 存在上次获取时间，最新时间与当前时间对比大于 0
                    if($lastTime > 0) {
                        if($historyTime - $lastTime > self::HISTORY_TRADE_CONFIG['SYMBOL_GET_INTERVAL_TIME']) {
                            $result = true; //需重启
                            break;
                        } else {
                            continue;
                        }
                    } else {
                        if(time() - $historyTime < self::HISTORY_TRADE_CONFIG['SYMBOL_NULL_INTERVAL_TIME']) {
                            $result = true; //需重启
                            break;
                        }
                    }
                }
                break;
            }catch (\Exception $e) {
                $result = true;
            }
            // 1 s 尝试一次获取
            sleep(1);
        }
        // 添加日志
        self::log(__FUNCTION__,'【' . $portIndex . '】' . $result);
        return $result;
    }


    /**
     * 填写重启日志
     * @param $type
     * @param $result
     */
    static function log($type,$result){
        try {
            //写入异常日志
            $path = dirname(__FILE__) . '/restart/';
            is_dir($path) || mkdir($path,0777,true);
            file_put_contents($path . $type . '.log',date('Y-m-d H:i:s ') . $result .  "\n" ,FILE_APPEND);
        }catch (\Exception $e) {
            return false;
        }
        return true;
    }


}